// 探照灯实体类：为玩家直升机提供探照灯效果
class Flashlight extends Entity {

    // 构造函数：初始化探照灯
    constructor() {
        super();

        // 创建探照灯光效果的离屏画布
        this.light = createCanvas(500, 400, (ctx, can) => {
            const shadow = 50;  // 光晕效果的模糊半径

            // 设置光晕效果
            ctx.shadowColor = '#fff';
            ctx.shadowBlur = shadow;

            // 绘制探照灯光束
            ctx.fillStyle = '#fff';
            ctx.beginPath();
            ctx.moveTo(shadow, can.height / 2);
            // 绘制扇形光束（60度角）
            ctx.arc(
                can.width - 200 - shadow,  // 光源位置X
                can.height / 2,            // 光源位置Y
                can.height / 2,            // 光束半径
                PI / 3,                    // 起始角度（60度）
                -PI / 3,                   // 结束角度（-60度）
                true,                      // 逆时针绘制
            );
            ctx.fill();
        });
    }

    // 渲染探照灯
    // @param camera: 当前相机实体
    render(camera) {
        // 获取玩家直升机
        const player = firstItem(this.world.bucket('player'));
        if (!player) return;

        // 设置探照灯位置和角度
        ctx.translate(player.x, player.y);     // 移动到玩家位置
        ctx.rotate(player.angle);              // 跟随玩家角度
        ctx.translate(-20, 0);                 // 向后偏移20像素
        ctx.rotate(PI / 16);                   // 稍微向下倾斜（11.25度）

        // 设置半透明效果并绘制光束
        ctx.globalAlpha = 0.05;
        ctx.drawImage(this.light, 0, -this.light.height / 2);
    }
}
